perm filename ARMSS[SYS,HE] blob sn#004211 filedate 1972-07-21 generic text, type T, neo UTF8
00100	IFN USER+TRACK,<0>
00200	STRADR:	MOVE BITSAV	;Enters here every 1/60 th. seccond
00300	IFE USER+TRACK,<
00500		TRNE DTST
00600		CALLI 400024
00610		DATAO ARM,[2]
00655		SOSLE STWT
00677		CALLI 400024
00700	>
00800		MOVE P,[XWD -PDLL,PDL]	;PUSH DOWN STACK
00900		MOVE CBUF,CBUFS
01000		MOVEI DATWD,2		;YELLOW ARM
01100	IFN REPORT+TRACK,<
01200		MOVE DATA,DATPT
01300	>
01400	IFN USER+TRACK,<
01500		TRNE DTST
01600		JRST SWDONE
01700	>
01800	IFE USER,<
01900	IFN TRACK,<
02000		SKIPE WALK
02100		JRST NCHK
02200	>
02300		CONSZ 40		;CHECK TO SEE IF ON PDP-6
02400		JRST[	MOVEI TAC,PDPERR
02500			MOVEM TAC,TRAJER
02600			JRST TOFF]
02700	;	CONO 4,400		;TURN OFF THE PI'S
02800		CONI 0,AC		;SET PROCESSOR FLAGS
02900		ANDI AC,7
03000		CONO 0,2050(AC)
03100		TRZE TRIP		;TURN ON ARM
03200		DATAO ARM,[3]
03300	>
03400	NCHK:
03700		MOVEI K,51B23		;-10 VOLT REFERENCE
03800	IFE USER,<PUSHJ P,PREAD		;REFTR← -10 volt reference
03900		LDB AC,SNUM		;PICK UP MIDDLE SAMPLE
04000		ANDI DACVAL,7777	;LEAVE LAST SAMPLE IN J
04100		ADDI AC,(DACVAL)	;ADD THEM TOGETHER
04200	>
04300	IFN USER,<MOVEI AC,17770>
04400		CAIGE AC,17000		;IS THE FUSE BLOWN
04500		JRST[		MOVEI TAC,REFERR
04600				MOVEM TAC,TRAJER
04700				JRST TOFF]
04800		MOVEM AC,REFTR		;REFERENCE READING
04900		MOVEI K,710000
05000	IFE USER,<PUSHJ P,PREAD>
05100		LDB AC,SNUM
05200		ANDI DACVAL,7777
05300		ADDI AC,(DACVAL)
05400		MOVEM AC,VZ
05500	IFN TRACK,<
05600		SKIPE WALK
05700		JRST TOK
05800	>
05900	IFE USER,<
06000		CONI CLOCK,AC
06100		TLZ AC,777774
06200		JRST STIME		;TIME IN MICRO SECONDS
06300	>
06400	IFN USER,<JRST .+2>
     

00100	NXTJIF:
00200	IFN USER,<JRST SWDONE>
00300	IFN DEB<
00400		MOVEM 17,ACSAV+17
00500		MOVEI 17,ACSAV
00600		BLT 17,ACSAV+16
00700		MOVE 17,ACSAV+17
00800	>
00900	IFN TRACK,<
01000		SKIPE WALK
01100		JRST TOK
01200	>
01300	IFN REPORT+TRACK,<
01400		HRRZI TAC,(DATA)
01500		CAIL TAC,DATO+DBL-1
01600		JRST[	SUB DATA,[XWD DBL,DBL]
01700			MOVE TAC,[XWD DATO+DBL,DATO]
01800			BLT TAC,(DATA)
01900			HRRZI AC,(DATA)
02000			HRRZ TAC,DATIWD
02100			SUBI AC,(TAC)
02200			JRST RDP]
02300		HRRZI AC,(DATA)
02400		HRRZ TAC,DATIWD
02500		SUBI AC,(TAC)
02600		HRRZ MQ,DATPT
02700		SUBI TAC,(MQ)
02800		IMUL AC,TAC
02900	RDP:	SKIPLE AC
03000	IFN TRACK,<PUSH DATA,[0]>
03100	IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
03200		MOVEI AC,DATO-1
03300		HRRZ TAC,DATIWD
03400	 	CAIL TAC,DATO+DBL-1
03500		HRRM AC,DATIWD
03600		MOVEM DATA,DATPT
03700	>
03800	IFE USER,<
03900		MOVEI TAC,=1000
     

00100	WATSTL:	CONI CLOCK,AC
00200		TLZ AC,777774
00300		SUB AC,LTIME
00400		JUMPGE AC,.+2
00500		ADD AC,[=1000000]
00600	IFN REPORT,<
00700		CAIN TAC,=1000
00800		JRST[	PUSH DATA,[<SIXBIT/TICK/>+1]
00900			PUSH DATA,AC
01000			JRST .+1]
01100	>
01200		CAIGE AC,=16667		;delta T greater than 16.7 msec.?
01300		SOJGE TAC,WATSTL
01400		JUMPL TAC,TE
01500		CAIL AC,=19000
01600		JRST[	MOVEI TAC,ISERR
01700			MOVEM TAC,TRAJER
01800			JRST TOFF]
01900		MOVE AC,LTIME
02000		ADDI AC,=16667
02100		TLNE AC,777774
02200		SUB AC,[=1000000]
02300	STIME:	MOVEM AC,LTIME		;LTIME←LTIME+16.7 msec.
02400	>
02500		AOS AC,COUNT
02600		CAIG AC,=1000
02700		JRST TOK
02800	TE:	MOVEI AC,TERR
02900		MOVEM AC,TRAJER
03000		JRST TOFF
03100	TOK:
03200	IFN ADJUST,<
03300		MOVEI K,14B23
03400		MOVEM BITSAV
03500		MOVEI I,2
03600	RNP:	PUSHJ P,PREAD
03700		LDB AC,SNUM
03800		FSC AC,221
03900		JSA 16,EXP
04000		JUMP AC
04100		FMPR [0.15]
04200		MOVEM FACTOR(I)
04300		SOJGE I,RNP
04400		MOVE BITSAV
04500		MOVE I,ADJI
04600		JUMPL I,MAIN
04700	IFN ADJG,<
04800		MOVE AC,ADJE
04900		FMPR AC,FACTOR
05000		MOVEM AC,KE(I)		;POT 12
05100		MOVE AC,ADJV
05200		FMPR AC,FACTOR+1
05300		MOVEM AC,KV(I)		;POT 13
05400		MOVE AC,ADJIF
05500		FMPR AC,FACTOR+2
05600		MOVEM AC,KI(I)	;POT 14
05700	>
05800	IFN ADJD,<
05900		MOVE AC,ADJE
06000		FMPR AC,FACTOR
06100		MOVEM AC,KM(I)		;POT 12
06200		MOVE AC,ADJV
06300		FMPR AC,FACTOR+1
06400		MOVEM AC,PK(I)		;POT 13
06500	>
06600	>
     

00100	MAIN:	PUSHJ P,ANGLES		;read joint angles
00200		TRNE RONLY		;read angles only?
00300		JRST[	PUSHJ P,HEAD	;read hand also
00400			MOVE AC,HAND
00500			MOVEM AC,SET
00600			PUSHJ P,READED]	;DOES NOT RETURN
00700		TRNN RUN
00800		JRST[	SKIPGE TAC,FUNCT	;not run, mabye a function
00900			JRST NEXT
01000			JUMPE TAC,[CAIL CBUF,BUF;try next buffer
01100				SETOM (CBUF)	;dont do this if first buffer
01200				MOVEM CBUF,CBUFS
01300				ADDI CBUF,1001
01400				CAILE CBUF,BUF2
01500				MOVEI CBUF,BUF		;Advance buffer
01600				MOVE 2,(CBUF)
01700				JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
01800					JRST SWDONE]
01900				JUMPN 2,BUFRDY		;the last buffer stop.
02000				JRST[	TRO DTST
02100			IFN REPORT,<PUSH DATA,[0]>
02200					JRST BUFWT]
02300			BUFRDY:	HRRZ 2,(CBUF)
02400				ADDI 2,-1(CBUF)
02500				HRRZM 2,STKPTR
02600				SETZM COUNT
02700				JRST NEXT]
02800			JRST TT]	;otherwise perform function
02900		MOVEI J,6
03000		PUSHJ P,SERVO		;computes feedback and integral term
03100		JUMPE J,[RUDONE:TRZ DROP+RUN+FINAL	;if J is zero then end of run
03200				PUSHJ P,SETSET
03500				JRST NEXT]
03600		PUSHJ P,DRIVE		;Drive motors
03700		PUSHJ P,EVAL		;Compute TFF and TDD
03800		PUSHJ P,NXTH		;Compute next T0
     

00100	TT:	PUSHJ P,REFLEX
00200	DISP:	MOVE AC,FUNCT
00300		CAILE AC,MAXFN
00400		JRST NEXT
00500		JRST @.+1(AC)		;Perform function
00600		NXTJIF	;0
00700		HOPEN	;1
00800		HCLOSE	;2
00900		NXTJIF	;3
01000		PLACE	;4
01100		NUDGE	;5
01200		SETCH	;6
01300		STOP	;7
01310		SAVE	;10
01320		RESTORE	;11
01400	
01500		XLIST
01600		SUBTTL	SPACEWAR CODE	ANGLE MEASUREMENT	LOU PAUL
01700		LIST
     

00100	ANGLES:	MOVEI I,5
00200		MOVEI L,10
00300	IFN REPORT,<PUSH DATA,[<SIXBIT/THETA/>+6]>
00400	SETCHA:	MOVEI K,CHA
00500		TRNE ALT6
00600		MOVEI K,N6CHA
00700	RSTRT:	SOJL L,REDER
00800		IFE USER,<
00900		PUSHJ P,PREAD
01000		LDB AC,SNUM
01100		CAIN I,5
01200		JRST[	TRNE POTREAD
01300			JRST .+1
01400			CAIL AC,1000
01500			CAILE AC,7000
01600			JRST[	TRC ALT6
01700				JRST SETCHA]
01800			MOVEI K,CHA5
01900			JRST .+1]
02000		ANDI DACVAL,7777
02100		ADDI AC,(DACVAL)
02200		SETZ TAC,
02300		DIV AC,REFTR
02400		ASH AC,-26
02500		MOVE J,AC
02600		TRNE POTREAD
02700		JRST[	ADDI J,=1000
02800			JRST EXON]
02900		ASHC AC,-11		;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
03000		LDB MQ,NON(I)		;GET LOWER DIFF
03100		ADDI J,(MQ)		;ADD IT TO READING
03200		AOJ AC,
03300		LDB AC,NON(I)		;GET UPPER DIFFERENCE
03400		SUBI AC,(MQ)
03500		MUL TAC,AC		;INTERPOLATE
03600		ADD J,TAC		;CORRECTED READING
03700	;	COMPUTE TD
03800		MOVEI TAC,(J)
03900		EXCH TAC,OPOT(I)
04000		SUB TAC,OPOT(I)
04100		MOVM AC,TAC
04200		CAIG AC,2
04300		SETZ TAC,
04400		FSC TAC,226
04500		FMPR TAC,SCALE(I)
04600		CAIG AC,4000	;IN CASE JOINT 6 ALT SWITCH HAS OCCURED
04700		MOVNM TAC,TD(I)
04800	
04900		FSC J,226		;FLOAT
05000		FMPR J,SCALE(I)
05100		FADR J,OFF(I)
05200	>
05300	IFN USER,<
05400		MOVE J,ERR(I)
05500		FSC J,-1
05600		FADR J,T0(I)
05700	>
05800		CAIN I,5
05900		JRST[	TRNE ALT6
06000			FADR J,OFF6
06100			FADR J,ROT6
06200			MOVEM J,TH+5
06300			FSBR J,T0+5
06400			MOVSI MQ,(180.0)
06500			CAML J,MQ
06600			JRST[	INCROT:	MOVN MQ,MQ
06700					FSC MQ,1
06800					FADRM MQ,ROT6
06900					FADRM MQ,TH+5
07000					JRST THS]
07100			MOVN MQ,MQ
07200			CAMG J,MQ
07300			JRST INCROT
07400			JRST THS]
07500	EXON:	MOVEM J,TH(I)		;THETA
07600	THS:
07700	IFN REPORT,<
07800		MOVE MQ,TH(I)
07900		FSBR MQ,T0(I)
08000		PUSH DATA,MQ
08100	>
08200	NXCHA:	SOJGE I,RSTRT	; IF LAST TIME THROUGH
08300		MOVEI K,710000
08400	IFE USER,<
08500		PUSHJ P,PREAD
08600		LDB AC,SNUM
08700		ANDI DACVAL,7777
08800		ADDI AC,(DACVAL)
08900		SUB AC,VZ
08910		MOVM TAC,AC
08920		CAIG TAC,2
08930		SETZ AC,
09000		FSC AC,216
09100		FMPR AC,VSCALE
09200		MOVEM AC,TD+2
09300	>
09400	IFN USER,<SETZM TD+2>
09500		POPJ P,
09600	
09700		XLIST
09800				SUBTTL			SPACEWAR CODE			SERVO CALC.			LOU PAUL
09900		LIST
     

00100	SERVO:	MOVEI I,5
00200		SETZM ASTP
00300	SERVL:	
00400		TRNE FINAL
00500		JRST NULL		;MODIFY THETA BY INTEGRAL TERM
00600		MOVN AC,T0(I)
00700		FSC AC,1
00800		FADR AC,TF(I)
00900		FADR AC,T0P(I)
01000	MODT0:	HRRZ TAC,BMASK(I)
01100		TDNN TAC,FBI
01200		JRST [	MOVE TAC,ERR(I)
01300			MOVE MQ,DMASK(I)
01400			TDNE MQ,FBI
01500			MOVN TAC,TAC
01600			MOVEM TAC,ET0(I)
01700			JRST NOBACK]
01800		MOVE TAC,TH(I)
01900		FSBR TAC,T0(I)		;POSITION ERROR
02000		MOVEM TAC,ET0(I)
02100		MOVE TAC,T0P(I)
02200		FSBR TAC,T0(I)
02300		FADR TAC,TD(I)
02400		MOVEM TAC,VERR(I)
02500	
02600		MOVN TAC,ET0(I)
02700		FMPR TAC,KE(I)		;ERROR GAIN
02800		FADR AC,TAC
02900		MOVN TAC,VERR(I)
03000		FMPR TAC,KV(I)		;VELOCITY GAIN
03100		FADR AC,TAC
03200		MOVE TAC,ERRINT(I)
03300		FMPR TAC,KI(I)
03400		FADR AC,TAC
03500	
03600	NOBACK:	CAIE I,2
03700		FMPR AC,[IRAD:0.0174532925]	;JOINT 3 IS IN INCHES
03800		FMPR AC,CII(I)		;JOINT INERTIA
03900		TRNE STP
04000		JRST[	MOVE MQ,AC
04100			FDVR MQ,F0(I)
04200			FMPR MQ,STQ(I)
04300			FADRM MQ,ASTP
04400			JRST .+1]
04500		FADR AC,CI(I)		;GRAVITY TERM
04600		MOVEM AC,T(I)			;ERROR CORRECTION TORQUE
04700	NXTACC:
04800		SOJGE I,SERVL
04900		TRNE STP
05000		JRST[	SOSL HCNT
05100			JRST .+1
05200			MOVE AC,ASTP
05300			CAML AC,SDTQ
05400			JRST[	TRZ STP
05500				PUSHJ P,SETSET
05600				JRST RUDONE]
05700			JRST .+1]
05800	IFN DYNAMICS,<
05900		HRRI TAC,1(DATA)
06000		HRLI TAC,DDAT
06100		HRRZI AC,15(TAC)
06200		BLT TAC,(AC)
06300		ADD DATA,[XWD 16,16]
06400	>
06500		POPJ P,
06600	
06700	NULL:	SETZ AC,
06800		TRZE STP
06900		JRST[	MOVEI TAC,STPERR
07000			MOVEM TAC,TRAJER
07100			POP P,TAC
07200			JRST TOFF]
07250		MOVE TAC,FBI
07300		TDNN TAC,GMASK(I)
07400		JRST SO
07500		MOVE TAC,T0(I)
07600		FSBR TAC,TH(I)			;-POSITION ERROR
07700		FADRM TAC,ERRINT(I)
07800		MOVM MQ,TAC			;|POSITION ERROR|
07900		TRNN DROP
08000		SKIPE TP(I)			;STILL IN TRAJECTORY
08100		JRST MODT0
08200		CAML MQ,ERR(I)			;COMPARE POSITION ERROR
08300		JRST MODT0
08400		MOVM MQ,TD(I)
08500		CAML MQ,ERR(I)			;COMPARE VELOCITY ERROR
08600		JRST MODT0
08700	SO:	TDZ DATWD,BMASK(I)
08800	IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
08900		DATAO ARM,DATWD
08910		HRLZ MQ,I
08920		TRC MQ,400000
08930		DATAO WIDTH,MQ
09000		SOJA J,MODT0
09100		XLIST
09200				SUBTTL			SPACEWAR CODE			DRIVE CALC.			LOU PAUL
09300		LIST
     

00100	DRIVE:	JFCL 10,.+1
00200		MOVEI I,5		;Loop once for each joint
00300	IFN REPORT,<PUSH DATA,[<SIXBIT/DAC/>+6]>
00400		TRZ DATWD,504000
00500		TRO DATWD,021200		;INITIAL SIGN BITS FOR POSITIVE ROTATION
00600	LS0:	TDNN DATWD,BMASK(I)
00700		JRST ISP
00800		MOVE MQ,TD(I)
00900		JUMPN MQ,.+2
01000		MOVN MQ,ET0(I)
01100		FMPR MQ,T(I)
01200		JUMPL MQ,[	MOVM MQ,T(I)
01300				FSBR MQ,F0(I)
01400				JUMPL MQ,[	FDVR MQ,F0(I)
01500						FMPR MQ,V0(I)
01600						FSC MQ,1
01700						FADR MQ,V0(I)
01800						SKIPGE T(I)
01900						MOVN MQ,MQ
02000						JRST CEMF]
02100				MOVSI AC,(1.0)
02200				FSBR AC,PK(I)
02300				FMPR MQ,AC
02400				FMPR MQ,KM(I)
02500				FADR MQ,V0(I)
02600				SKIPG T(I)
02700				MOVN MQ,MQ
02800				JRST CEMF]
02900		SKIPN T(I)
03000		JRST[		SKIPN TD(I)
03100				JRST CEMF
03200				MOVE MQ,V0(I)
03300				SKIPGE TD(I)
03400				MOVN MQ,MQ
03500				JRST CEMF]
03600		JUMPE MQ,NOEX
03700		MOVE MQ,V0(I)
03800		SKIPGE T(I)
03900		MOVN MQ,MQ
04000	NOEX:	MOVSI AC,(1.0)
04100		FADR AC,PK(I)
04200		FMPR AC,T(I)
04300		FMPR AC,KM(I)
04400		FADR MQ,AC
04500	CEMF:
04600		MOVE AC,EMF(I)
04700		FMPR AC,TD(I)
04800		MOVSI J,(30.0)
04900		JUMPGE MQ,DRVLT
05000		MOVN AC,AC
05100	DRVLT:	FSBR J,AC			;Available drive voltage
05200		CAMGE J,[1.0]
05300		JRST MAXDRV
05400	VELOK:	MOVM AC,MQ
05500		FDVR AC,J		;AC= REL TIME ON
05600		FIX AC,211000		;1=16
05700		CAML AC,[4000000]
05800		JRST DHO		;too much force stop the arm
05900		CAILE AC,776000
06000	MAXDRV:	MOVEI AC,776000
06100	IFN REPORT+TRACK+USER+DEB,<
06200		MOVEM AC,MOTOR(I)
06300		SKIPGE MQ
06400		MOVNS MOTOR(I)
06500	>
06600		TRC AC,400000
06700		HRL AC,I
06800	SETDRV:
06900	IFN TRACK,<SKIPN WALK>
07000		DATAO WIDTH,AC
07100		JUMPGE MQ,ISP
07200		TDC DATWD,DMASK(I)
07300	ISP:
07400	IFN REPORT,<PUSH DATA,MOTOR(I)>
07500		SOJGE I,LS0
07600		JFCL 10,DHO
07700	IFN TRACK,<SKIPN WALK>
07800		DATAO ARM,DATWD
07900		POPJ P,
08000	
08100		XLIST
08200		SUBTTL	SPACEWAR CODE				LOU PAUL
08300		LIST
     

00100	NXTH:	MOVE AC,[XWD T0,T0P]
00200		BLT AC,T0+5
00300		TRNE DROP
00400		JRST[	MOVEI I,5
00500		OL:	MOVE AC,DELTH(I)
00600			FADRM AC,DTH(I)
00700			SOJGE I,OL
00800			JRST JALS]
00900	NTH:
01000		TRNE INCREM
01100		JRST[	AOS MQ,TICKS
01200			CAML MQ,NTICKS
01300			JRST[	TRZ INCREM
01400				SKIPN TP
01500				TRO FINAL
01600				MOVEI I,5
01700			FIL:	MOVE AC,DELTH(I)
01800				FADRB AC,DTH(I)
01900				FADR AC,TFF(I)
02000				MOVEM AC,TF(I)
02100				SETZM DELTH(I)
02200				SOJGE I,FIL
02300				POPJ P,]
02400			SETZ I,
02500			DIV MQ,NTICKS
02600			ASH MQ,-10
02700			FSC MQ,200
02705			MOVSI AC,(6.0)
02710			FMPR AC,MQ
02715			FADR AC,[-15.0]
02720			FMPR AC,MQ
02725			FADR AC,[10.0]
02730			FMPR AC,MQ
02735			FMPR MQ,MQ
02740			FMPR MQ,AC
02800			MOVEI I,5
02900		LDC:	MOVE AC,DELTH(I)
03000			FMPR AC,MQ
03100			FADR AC,DTH(I)
03200			FADR AC,TFF(I)
03300			MOVEM AC,TF(I)
03400			SOJGE I,LDC
03500			POPJ P,]
03600	JALS:	MOVEI I,5
03700	JAL:	MOVE AC,DTH(I)
03800		FADR AC,TFF(I)
03900		MOVEM AC,TF(I)
04000		SOJGE I,JAL
04100		POPJ P,
04200	
     

00100	EVAL:	MOVEI I,5
00200	EL:	MOVE J,TP(I)	;POINTS TO KOE5
00300		JUMPE J,NE
00400		AOS MQ,TJ(I)
00500		CAML MQ,TN(I)	;NUMBER OF TICKS THIS SEGMENT
00600		JRST[				;END OF SEGMENT
00700			CAIN I,5
00800			JRST[			;JOINT 6 HAS CONTROL WORD
00900				MOVE TAC,[XWD NC,CI]
01000				BLT TAC,CI+=11	;UPDATE C
01100				MOVE TAC,TICKS
01200				CAMGE TAC,NTICKS
01300				TRO INCREM
01400				LDB TAC,[POINT 3,1(J),2]	;LEVEL
01500				JUMPN TAC,[			;SWITCH POINT
01600					SKIPG LOOP(TAC)
01700					JRST[			;INITIALIZE LOOP
01800						LDB AC,[POINT 15,1(J),17]
01900						MOVEM AC,LOOP(TAC)	;COUNT
02000						JRST SETALT]
02100					SOSLE LOOP(TAC)		;IN LOOP
02200				SETALT:	TRO ALT
02300					JRST GETNXT]
02400				JRST GETNXT]
02500		GETNXT:	TRNE ALT
02600			JRST[	LDB J,[POINT 9,(J),8]	;ALT POINTER
02700				JRST GOT]
02800			LDB J,[POINT 9,(J),17]		;NEXT POINTER
02900			JUMPE J,[SETZM TP(I)
03000				TRO FINAL
04200				MOVE AC,A4(I)
04300				ADD AC,A3(I)
04400				ADD AC,A2(I)
04500				ADD AC,A1(I)
04600				ADD AC,A0(I)
04700				JRST ELL]
04800		GOT:	ADDI J,(CBUF)
04900			MOVEM J,TP(I)
05000			SETZM TJ(I)
05100			HRRZ AC,(J)
05200			MOVEM AC,TN(I)
05300			CAIN I,5
05400			JRST[		;INCREMENT FOR C
05500				HRRZ TAC,1(J)
05600				ADDI TAC,(CBUF)
05700				HRLI TAC,(TAC)
05800				HRRI TAC,NC
05900				BLT TAC,NC+=11
06000				FSC AC,233
06100				MOVSI MQ,(1.0)
06200				FDVR MQ,AC
06300				MOVEI K,=11
06400			DELC:	MOVE AC,NC(K)
06500				FSBR AC,CI(K)
06600				FMPR AC,MQ
06700				MOVEM AC,DCI(K)
06800				SOJGE K,DELC
06900				JRST DDELC]
07000		DDELC:	HLRE AC,-3(J)
07100			MOVEM AC,A4(I)
07200			HRRE AC,-3(J)
07300			MOVEM AC,A3(I)
07400			HLRE AC,-2(J)
07500			MOVEM AC,A2(I)
07600			HRRE AC,-2(J)
07700			MOVEM AC,A1(I)
07800			HLLZ AC,-1(J)
07900			MOVEM AC,SC(I)
08000			HRRE AC,-1(J)
08100			MOVEM AC,A0(I)
08200			JRST ELL]
08300		CAIN I,5
08400		JRST[	MOVEI K,=11
08500		DECC:	MOVE AC,DCI(K)
08600			FADRM AC,CI(K)
08700			SOJGE K,DECC
08800			JRST .+1]
08900		DIV MQ,TN(I)
09000		MOVE AC,A4(I)
09100		MUL AC,MQ
09200		ADD AC,A3(I)
09300		MUL AC,MQ
09400		ADD AC,A2(I)
09500		MUL AC,MQ
09600		ADD AC,A1(I)
09700		MUL AC,MQ
09800		ADD AC,A0(I)
09900	ELL:	XOR AC,SC(I)
10000		FSC AC,0
10100		MOVEM AC,TFF(I)
10200		CAIN I,5
10300		JRST[	MOVE AC,TFF+5
10400			FSBR AC,T0+5
10500			MOVSI MQ,(180.0)
10600			CAML AC,MQ
10700			JRST[	INCT0:	FSC MQ,1
10800					FADRM MQ,T0+5
10900					FADRM MQ,TF+5
11000					JRST .+1]
11100			MOVN MQ,MQ
11200			CAMG AC,MQ
11300			JRST INCT0
11400			JRST .+1]
11500	NE:	SOJGE I,EL
11600		TRZ ALT
11700		POPJ P,
11800	
     

00100	DHO:	AOJ I,			;DISASTER HAS OCCURED
00200		LSH I,3			;JOINT NUMBER
00300		IORI I,EXER
00400		MOVEM I,TRAJER
00500		POP P,I
00600	
00700	TOFF:	MOVE TAC,STKPTR
00800		MOVEM TAC,ERRSTK
00900		MOVEI L,10
01000		TRNE RONLY
01100		JRST READED
01200		TRZ RUN+FINAL+DROP	;STOP THE ARM
01300	MOVNXT:	AOS TAC,STKPTR
01400	MOVNX:	SOJL L,[ LE:
01500			MOVEI AC,LOOPER
01600			MOVEM AC,TRAJER
01700			JRST PW]
01800		HLRE AC,@STKPTR
01900		CAIN AC,3		;IS IT A WAIT
02000		JRST MOVNXT
02100		CAIN AC,SKPERR
02200		JRST[	HRRZ AC,(TAC)
02300			CAMN AC,TRAJER
02400			JRST[	AOS STKPTR
02500				SETZM TRAJER
02600				JRST NEXT]
02700			JRST MOVNXT]
02800		CAIN AC,JMPREL
02900		JRST[	HRRE AC,(TAC)
03000			ADDI TAC,(AC)
03100			HRRM TAC,STKPTR
03200			JRST MOVNX]
03300	PW:	CAIL TAC,BUF
03400		HRRM TAC,JUMPBK
03500		MOVEI TAC,WAITIN
03600		MOVEM TAC,STKPTR
03700		MOVEI TAC,3
03800		MOVEM TAC,FUNCT
03900	IFN TRACK,<SKIPN WALK>
04000		DATAO ARM,[2]		;STOP THE ARM
04100	IFN REPORT,<PUSH DATA,[0]>
04200	READED:	TRO DTST
04300	IFN DEB,<
04400		MOVEM 17,ACSAV+17
04500		MOVEI 17,ACSAV
04600		BLT 17,ACSAV+16
04700	>
04800		JRST SWDONE
04900	
     

00100	NEXT:	TRNE RUN
00200		JRST[	SETZM FUNCT
00300			JRST NXTJIF]
00400		MOVEI L,10
00500		MOVE AC,FUNCT
00600		CAIE AC,6		;SET TOUCH
00700		JRST[	MOVE TAC,SOTCHS
00800			MOVEM TAC,SOTCH
00900			TRZ STCH
01000			JUMPE TAC,.+1
01100			TRO STCH
01200			JRST .+1]
01300	IFN TRACK,<SKIPN WALK>
01400		MOVEI DATWD,2
01500		DATAO ARM,DATWD		;STOP THE ARM
01600	INCPIC:	AOS AC,STKPTR
01700	PICKUP:	SOJL L,LE
01800		HLRE TAC,@STKPTR
01900		CAIN TAC,JMPABS
02000		JRST[JMPA:HRRZ TAC,@STKPTR
02100			MOVEM TAC,STKPTR
02200			JRST PICKUP]
02300		CAIN TAC,SKPERR
02400		JRST INCPIC
02500		CAIN TAC,JMPREL
02600		JRST[	HRRE TAC,(AC)
02700			ADDI TAC,(AC)
02800			HRRM TAC,STKPTR
02900			JRST PICKUP]
03000		JUMPL TAC,[TRO RUN
03100			SETCA TAC,
03200			MOVEM TAC,FUNCT
03300			AOS DOING		;INCREASE TRAJECTORY NUMBER
03400			HLRZ 2,(CBUF)
03500			MOVEM 2,NTICKS		;RUN TIME
03600			SETZM LOOP
03700			MOVE TAC,[XWD LOOP,LOOP+1]
03800			BLT TAC,TN+5
03900			MOVE DATWD,1(CBUF)
04000			HRRZM DATWD,FBI
04100			MOVEI I,5
04200			MOVEI K,35
04300		SUL:	SUBI K,4
04400			HRLZM K,TJ(I)
04500			MOVEI TAC,TJ(I)
04600			MOVEM TAC,TP(I)
04700			TDNE DATWD,BMASK(I)
04800			TDO DATWD,BMASK(I)
04900			SETZM DTH(I)
05000			SOJGE I,SUL
05100	
05200			HRLZI TAC,764(CBUF)
05300			HRRI TAC,NC
05400			BLT TAC,NC+=11
05500			PUSHJ P,EVAL
05600			TRZ INCREM
05700			MOVEI I,5
05800		MOVBK:	MOVE AC,TH(I)
05900			MOVEM AC,T0(I)
06000			MOVEM AC,TF(I)
06100			FSBR AC,TFF(I)
06200			CAIN I,5
06300			JRST[	MOVSI MQ,(180.0)
06400				CAML AC,MQ
06500				JRST[SETROT:FSC MQ,1
06600					MOVN MQ,MQ
06700					FADRM MQ,TH+5
06800					FADRM MQ,ROT6
06900					JRST MOVBK]
07000				MOVN MQ,MQ
07100				CAMG AC,MQ
07200				JRST SETROT
07300				JRST ADDTF]
07400		ADDTF:	MOVEM AC,DTH(I)
07410			MOVN AC,AC
07500			FADRM AC,DELTH(I)
07550			SETZM ERRINT(I)
07600			SETZM TD(I)
07700			SOJGE I,MOVBK
07800			PUSHJ P,EVAL
07900			PUSHJ P,NXTH
08000			SETZM TICKS
08100			TRZ FINAL
08200			HLRE TAC,@STKPTR
08300			JRST MARK]
08400		MOVEM TAC,FUNCT
08500		CAIN TAC,3		;IS IT A WAIT
08600		JRST[	AOS TAC,STKPTR
08700			CAIL TAC,BUF
08800			HRRM TAC,JUMPBK
08900			MOVEI TAC,WAITIN
09000			MOVEM TAC,STKPTR
09100	IFN REPORT,<PUSH DATA,[0]>
09200			TRO DTST
09300			PUSHJ P,SWDONE]
09400	MARK:
09500	IFN REPORT,<
09600		PUSH DATA,[<SIXBIT/NEXT/>+1]
09700		MOVE TAC,FUNCT
09800		HRL TAC,0
09900		PUSH DATA,TAC
10000	>
10100	
10200		JRST DISP
10300	SWDONE:
10400		MOVEM BITSAV
10500		MOVEM CBUF,CBUFS
10600	IFN REPORT+TRACK,<
10700		MOVEM DATA,DATPT
10800	>
10900	IFE USER,<
11000	IFN TRACK,<
11100		SKIPE WALK
11200		JRST @STRADR-1
11300	>
11400	;	CONO 4,200		;TURN ON THE PI'S
11500		CALLI 400024
11600	>
11700	IFN USER,<
11800		JRST @STRADR-1
11900	>
12000	
12100	SETSET:	MOVEI I,5
12200	FDTH:	MOVE AC,TH(I)
12300		MOVEM AC,T0(I)
12400		MOVEM AC,T0P(I)
12500		MOVEM AC,TF(I)
12600		FSBR AC,TFF(I)
12700		MOVEM AC,DTH(I)
12800		SETZM DELTH(I)
12900		SOJGE I,FDTH
13000		POPJ P,
13100	
     

00100	PREAD:
00200	IFN TRACK,<
00300		SKIPE WALK
00400		JRST[GNPR:AOBJP DATA,[	MOVE AC,[IOWD DBL,DATO]
00500					MOVEM AC,DATPT
00600					MOVE DATA,DATPT
00700					SETZ TAC,
00800					INPUT 15,1
00900					JRST GNPR]
01000			MOVE DACVAL,(DATA)
01100			JRST @READFN]
01200	>
01300		MOVEI TAC,10
01400		MOVEM TAC,DATMSD
01500	DACRED:	SOSGE DATMSD
01600		JRST[REDER:	MOVEI TAC,READER	
01700				MOVEM TAC,TRAJER
01800				JRST TOFF]
01900	DACST:	CONO DB,4250
02000		CONO AD,(K)
02100	NREAD:	MOVEI TAC,30
02200		CONSO DB,1000
02300		SOJGE TAC,.-1
02400		JUMPL TAC,[DACDIE:CONO AD,4000(K)	;STOP DAC
02500				TRO REREAD
02600			IFN DEB,<MOVEM DACVAL,DACERR>
02700				MOVEI TAC,12
02800			WRH:	SOJGE TAC,WRH
02900				JRST DACRED]
03000		DATAI DB,DACVAL
03100		CONSZ DB,10000
03200		JRST DACDIE
03300		XOR DACVAL,SBMSK
03400	IFN TRACK,<PUSH DATA,DACVAL>
03500		JRST @READFN
03600	FREAD:	ADDI K,770000
03700	IFN TRACK,<SKIPN WALK>
03800		CONO AD,4000(K)	;STOP AD ON NEXT CHANNEL
03900		POPJ P,
04000	READFN:	FREAD
04100	
04200		XLIST
04300		SUBTTL	CONSTANTS				LOU PAUL
04400		LIST
     

00100	NON:	POINT 12,INNER(AC),11
00200		POINT 12,INNER(AC),23
00300		POINT 12,INNER(AC),35
00400		POINT 12,OUTER(AC),11
00500		POINT 12,OUTER(AC),23
00600		POINT 12,OUTER(AC),35
00700	ERR:	0.05
00800		0.05
00900		0.01
01000		0.1
01100		0.1
01200		1.0
01300	TH:	BLOCK 6		;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
01400	HAND:	3.0
01500	OPOT:	BLOCK 6
01600	VERR:	BLOCK 6
01700	ET0:	BLOCK 6
01800	ERRINT:	BLOCK 6
01900	DTH:	BLOCK 6
02000	TD:	BLOCK 6
02100	T0P:	BLOCK 6
02200	T0:	-150.0
02300		-75.0
02400		14.0
02500		-90.0
02600		 60.0
02700		 0.0000
02800	TF:	BLOCK 6
02900	TFF:	BLOCK 6
03000	DELTH:	BLOCK 6		;THIS AND THE NEXT ARE BLT ED TOGETHER
03100	NTICKS:	0
03150	DTHS:	BLOCK 6
03200	T:	BLOCK 6
03300	IFN USER+REPORT+TRACK+DEB,<MOTOR:	BLOCK 6>
03400	FBI:	0
03500	VZ:	0
03600	STQ:	BLOCK 6
03700	SDTQ:	0
03800	ASTP:	0
03900	DCI:	BLOCK 6
04000	DCII:	BLOCK 6
04100	CI:	BLOCK 6
04200	CII:	BLOCK 6
04300	NC:	BLOCK =12
04400	IFN DEB,<DACERR:	0>
04500	REFTR:	0
04600	IFN DEB,<
04700	ETIM:	0
04800	ACSAV:	BLOCK 20
04900	>
05000	PDL:	DHO
05100		BLOCK PDLL
05200	LTIME:	0
05300	FUNCT:	0
05400	ROT6:	0
05500	TRAJER:	0
05600	DOING:	0
05700	DATMSD:	0
05800	CBUFS:	0
05900	SNUM:	POINT 12,DACVAL,23
06000	SBMSK:	400040004000
06100	DMASK:	400000
06200		100000
06300		20000
06400		4000
06500		1000
06600		200
06700	BMASK:	XWD 400000,200000
06800		XWD 200000, 40000
06900		XWD 100000, 10000
07000		XWD  40000,  2000
07100		XWD  20000,   400
07200		XWD  10000,   100
07300	GMASK:	200000
07400		 40000
07500		 10000
07600		  2000
07700		   400
07800		   100
07900		BLOCK 12
08000	WAITIN:	XWD 3,0
08100	JUMPBK:	XWD JMPABS,0
08200	STKPTR:	0
08300	ERRSTK:	0
08400	BITSAV:	0
08500	COUNT:	0
08600	STWT:	0
08700	HCNT:	0
08800	TP:	BLOCK 6
08900	TJ:	BLOCK 6
09000	LOOP:	BLOCK 10
09100	TN:	BLOCK 6
09200	SC:	BLOCK 6
09300	A0:	BLOCK 6
09400	A1:	BLOCK 6
09500	A2:	BLOCK 6
09600	A3:	BLOCK 6
09700	A4:	BLOCK 6
09800	BLOCKS:	0
09900	NXTBUF:	0
10000	BUF:	BLOCK 1001
10100	BUF2:	BLOCK 1001
10200	IFN ADJUST<
10300	ADJI:	-1
10400	ADJE:	0
10500	ADJV:	0
10600	ADJIF:	0
10700	FACTOR:	BLOCK 3
10800	>
10900	IFN REPORT+TRACK,<
11000	DATIWD:	0
11100		0
11200	DATPT:	0
11300	DATO:	BLOCK DBL+100
11400	>
11500	IFN DYNAMICS,<
11600	DDAT:	<SIXBIT/FORD/>+6
11700	FOR:	BLOCK 6
11800		<SIXBIT/BACK/>+6
11900	BAK:	BLOCK 6
12000	>